<!--
  功能：栏目管理
  作者：haohh
  邮箱：haohh@briup.com
  时间：2021年06月07日 10:24:34
  版本：v1.0
  修改记录：
  修改内容：
  修改人员：
  修改时间：
-->
<template>
  <div class='category'>
    <!-- 按钮区域 -->
    <div class="btns">
      <el-button type="primary" size="small" @click="toAddHandler">新增</el-button>
    </div>
    <!-- 表格区域 -->
    <el-table :data="categories">
      <el-table-column type="selection" width="50" align="center"></el-table-column>
      <el-table-column type="index" width="50" label="序号" align="center"></el-table-column>
      <el-table-column label="栏目名称" width="100" prop="name" align="center"></el-table-column>
      <el-table-column label="描述信息" width="300" prop="description" align="center"></el-table-column>
      <el-table-column label="父栏目ID" width="100" prop="parentId" align="center"></el-table-column>
      <el-table-column label="操作"  align="center">
        <template v-slot="scope">
          <el-button type="text" @click="toDelHandler(scope.row.id)">删除</el-button>
          <el-button type="text" @click="toEditHandler(scope.row)">修改</el-button>
        </template>
      </el-table-column>
    </el-table>
    <!-- 模态框 -->
    <el-dialog :title="title" :visible.sync="visible">
      {{form}}
      <el-form :model="form">
        <el-form-item label="栏目名称" :label-width="formLabelWidth">
          <el-input v-model="form.name"></el-input>
        </el-form-item>
        <el-form-item label="所属栏目" :label-width="formLabelWidth">
          <el-select v-model="form.parentId" placeholder="请选择活动区域">
            <el-option label="区域一" value="shanghai"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="描述信息" :label-width="formLabelWidth">
          <el-input type="textarea" v-model="form.description"></el-input>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="visible = false">取 消</el-button>
        <el-button type="primary" @click="saveOrUpdate(form)">确 定</el-button>
      </div>
  </el-dialog>
  </div>
</template>

<script>
import request from '@/utils/request.js'
import qs from 'qs'
import _ from 'lodash';
export default {
  // 组件名称
  name: 'demo',
  // 组件参数 接收来自父组件的数据
  props: {},
  // 组件状态值
  data () {
   return {
     categories: [],
     visible: false,
     form: {},
     formLabelWidth: '120px',
     title: ''
   }
  },
  // 计算属性
  computed: {},
  // 侦听器
  watch: {},
  // 组件方法
  methods: {
    // 1.请求所有信息
    findAllCategory() {
      request.get('/category/findAll').then(res => {
        this.categories = res.data
      })
    },
    // 2.点击保存按钮，保存栏目信息
    saveOrUpdate(data) {
      request.post('/category/saveOrUpdate', qs.stringify(data)).then(res => {
        this.findAllCategory()             // 重载数据
        this.$message.success(res.message) // 提示保存成功
        this.visible = false               // 关闭模态框
      })
    },
    // 3.删除按钮事件
    toDelHandler(id) {
      this.$confirm('此操作将永久删除该数据, 是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        request.get('/category/deleteById',{ params:{id} }).then(res => {
          this.findAllCategory()             // 重载数据
          this.$message.success(res.message) // 提示删除成功
        })
      })
    },
    // 4.修改按钮事件
    toEditHandler(row) {
      // 通过使用lodash的深克隆方法，深度克隆row对象
      this.form = _.clone(row)        // 将当前行准备修改的原始数据放到form表单中
      this.title = '修改栏目信息'
      this.visible = true    // 打开模态框
    },
    // 点击新增按钮事件处理函数
    toAddHandler() {
      this.title = '新增栏目信息'
      this.form = {}             // 置空表单
      this.visible = true        // 打开模态框
    },
  },
  // 以下是生命周期钩子
  /**
  * 组件实例创建完成，属性已绑定，但DOM还未生成，$ el属性还不存在
  */
  created () {
    this.findAllCategory()  // 初始化表格数据
  },
  /**
  * el 被新创建的 vm.$ el 替换，并挂载到实例上去之后调用该钩子。
  * 如果 root 实例挂载了一个文档内元素，当 mounted 被调用时 vm.$ el 也在文档内。
  */
  mounted () {
  },
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<!--使用了scoped属性之后，父组件的style样式将不会渗透到子组件中，-->
<!--然而子组件的根节点元素会同时被设置了scoped的父css样式和设置了scoped的子css样式影响，-->
<!--这么设计的目的是父组件可以对子组件根元素进行布局。-->
<style scoped>

</style>
